'use strict'
const Scene = require('../module/scene')

//多人场景服务
class SceneMgr {
    constructor() {
        this.scenes = new Map()
    }

    //初始化节点所有的场景
    initScene(nodeId, sceneArray) {
        for (let i in sceneArray) {
            let scene = new Scene(nodeId, nodeId)
            this.addScene(scene)
        }
    }

    //添加一个场景服务器
    addScene(scene) {
        this.scenes.set(scene.id, scene)
    }

    //返回场景服务的实例
    getSceneSerById(sceneId) {
        return this.scenes.get(sceneId)
    }

    //获取公共场景中所有的客户端数量
    getAllClientCnt() {
        let total = 0
        for (let scene of this.scenes.values()) {
            total += scene.getClientsCnt()
        }
    }

    //删除该场景的客户
    dropClientToScene(sceneId, sessionId) {
        this.scenes.get(sceneId).dropClient(sessionId)
    }

    //删除节点的所有场景用户
    dropSceneByNodeId(nodeId) {
        for (let scene of this.scenes.values()) {
            if (scene.nodeId === nodeId) {
                scene.dropAllClient()
            }
        }
    }

    //场景添加用户
    addClient(sceneId, session) {
        let scene = this.scenes.get(sceneId)
            //离开原来的场景
        if (session.sceneId) {
            exports.sceneMgr.getSceneSerById(session.sceneId).dropClient(session.id)
        }
        scene.addClient(session.id)
        session.sceneId = sceneId
    }
}

let sceneMgr = new SceneMgr()
module.exports = sceneMgr
